<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // Promise
    // Promise 是异步编程的一种解决方案，比传统的解决方案——回调函数和事件——更合理和更强大。

    // 所谓Promise，简单说就是一个容器，里面保存着某个未来才会结束的事件（通常是一个异步操作）的结果。从语法上说，Promise 是一个对象，从它可以获取异步操作的消息。Promise 提供统一的 API，各种异步操作都可以用同样的方法进行处理。


    // Promise的相关属性
    // Promise对象的状态([[PromiseState]])
    // pending     进行中
    // fulfilled   已成功
    // rejected    已失败

    // Promise对象中存储的数据 ([[PromiseResult]])


    // 如何创建Promise对象(实例化对象)  => 构造函数创建
    // var p = new Promise(function () {

    // });
    // console.log(p);


    // 如何改变Promise对象的状态?
    // 需要借助官方提供的方法 resolve() reject() 来改变
    // resolve() 将Promise对象的状态由 pending(进行中) 改为 fulfilled(已成功)
    // reject() 将Promise对象的状态由 pending(进行中) 改为 rejected(已失败)

    // resolve() reject()可以接收一个参数 作为Promise实例存储的数据

    // new Promise()的回调函数中执行同步任务   -> 立即改变状态
    // console.log(1);
    // var p = new Promise(function (resolve, reject) {
    //     // new Promise()中接收的函数 -> 同步任务 -> 直接执行
    //     // new Promise()中接收的函数中  -> 常用于执行异步代码 -> 同步也可以
    //     console.log(2);

    //     // resolve(3);
    //     reject(4)
    // });
    // console.log(p);

    // new Promise()的回调函数中执行异步任务   -> 未来改变状态(异步代码执行时)

    console.log(1);
    var p = new Promise(function (resolve, reject) {
        console.log(2);

        setTimeout(function () {
            console.log(3);
            resolve(4);
            console.log(p);  // {<fulfilled>:4}

        }, 2000)

    });
    console.log(p); // {<pending>:undefined}





</script>

</html>